<?php
    if (!isset($map_address)) $map_address="";
    if (!isset($map_longitude)) $map_longitude="";
    if (!isset($map_latitude)) $map_latitude="";
?>
<div class="row">
    <div class="col-xs-3">

        <input id="address_name" placeholder="请输入详细地址" name="[address-name]" type="text"  class="form-control" value="{$map_address}" />
    </div>
    <div class="col-xs-3">
        <button onclick="map_search()" type="button" class="btn btn-success btn-block">重新定位</button>
    </div>
    <div class="col-xs-3">
        <input readonly id="longitude_name" placeholder="地理坐标经度" name="[longitude-name]" type="text"  class="form-control" value="{$map_longitude}" />
    </div>
    <div class="col-xs-3">
        <input readonly id="latitude_name" placeholder="地理坐标纬度" name="[latitude-name]" type="text"  class="form-control" value="{$map_latitude}" />
    </div>
</div>
<br>
<div class="row">
    <div class="col-xs-12">
        <div id="map_anchor" style="background:#FFF;width: 100%;height: 400px;"></div>
    </div>
</div>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak={:config('baidu_map_key')}"></script>
<script type="text/javascript">
    $(function(){

        {if condition="!empty($map_longitude) && !empty($map_latitude)"}
        //初始化地图 参数依次为 地图容器，初始化经度，初始化纬度，是否初始化标注，地图精细度
        initialize('map_anchor',{$map_longitude},{$map_latitude},true,16,2);
        {else/}
        //无原始坐标 使用 初始化地图函数2 参数依次为 地图容器 是否初始化标注 地图精细度
        //initialize2('map_anchor',true,16);//自动定位在360中有点反应迟钝
        initialize('map_anchor',118.34076824,35.07240907,true,16);//默认到临沂
        {/if}

     });
    function map_search(){
        var val = $("input[name='[address-name]']").val();
        if(val == ''){
            showErrorMessage('请输入详细地址，在点击查找定位');
            return false;
        }
        search(val);
    }
    //有原始坐标 根据原始坐标 标注
    function initialize(e,xpoint,ypoint,markeron,du,special_tag){
        window.map = new BMap.Map(e);
        var point = new BMap.Point(xpoint,ypoint);
        map.centerAndZoom(point,du);

        map.clearOverlays(); //清除地图上所有覆盖物

        widget();//实例化控件
        if(markeron){
            addmarker(point,special_tag);
        }

    }

    //无原始坐标 ip 定位 标注到中心点
    function initialize2(e,markeron,du){
        try{
            window.map = new BMap.Map(e);

            var geolocation = new BMap.Geolocation();
            geolocation.getCurrentPosition(function(r){
                if(this.getStatus() == BMAP_STATUS_SUCCESS){

                    // 城市坐标中心点
                    var point = new BMap.Point(r.point.lng,r.point.lat);

                    // 设置
                    map.centerAndZoom(point, du);

                    map.clearOverlays(); //清除地图上所有覆盖物

                    widget();//实例化控件

                    if(markeron){
                        addmarker(point);
                    }
                }
                else {
                    showErrorMessage('failed'+this.getStatus());
                }
            });

        }catch(e){
            showErrorMessage(e.error+':'+e.message);
        }
    }

    function search(myValue){

        function myFun() {
            try {

                var pp = local.getResults().getPoi(0).point; //获取第一个智能搜索的结果
                map.centerAndZoom(pp, 16);//重新生成地图

                map.clearOverlays(); //清除地图上所有覆盖物

                addmarker(pp,2);//添加标注

            } catch (ex) {
                //抛出异常
                showErrorMessage('未搜索到您输入的地址，请输入详细地址重新定位');
                $("input[name='[longitude-name]']").val('');//经度存起来
                $("input[name='[latitude-name]']").val('');//纬度存起来
                //alert(ex.name+':'+ex.message);
            }
        }

        var local = new BMap.LocalSearch(map, { //智能搜索
            onSearchComplete : myFun
        });

        local.search(myValue);
    }

    //实例化控件
    function widget(){
        //实例化控件
        var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左上角，添加比例尺
        var top_left_navigation = new BMap.NavigationControl();  //左上角，添加默认缩放平移控件

        //添加控件
        map.addControl(top_left_control);
        map.addControl(top_left_navigation);

        map.enableScrollWheelZoom();   //启用滚轮放大缩小，默认禁用
        map.enableContinuousZoom();    //启用地图惯性拖拽，默认禁用

        map.clearOverlays(); //清除地图上所有覆盖物

    }

    //信息写到标注
    function biaozhu(e,special_tag){
        var dizhi;
        var geoc = new BMap.Geocoder();

        geoc.getLocation(e, function(rs){

            var addComp = rs.addressComponents;
            console.log(addComp);
            dizhi = addComp.city + addComp.district + addComp.street + addComp.streetNumber;

            if(special_tag!=2){
                $("input[name='[address-name]']").val(dizhi);
            }

            var content = dizhi + "<br/><br/>经度：" + e.lng + "<br/>纬度：" + e.lat;
            var opts = {
                enableMessage:false,//关闭信息
            }
            var infoWindow = new BMap.InfoWindow("<p style='font-size:14px;'>" + content + "</p>",opts);

            Marker.openInfoWindow(infoWindow,map.getCenter());//将经纬度信息显示在提示框内

        });
    }

    function addmarker(dingpoint,special_tag){
        window.Marker = new BMap.Marker(dingpoint);//实例化标注

        map.addOverlay(Marker); //添加标注

        //位置信息标注到标注
        biaozhu(dingpoint,special_tag);

        $("input[name='[longitude-name]']").val(dingpoint.lng);//经度存起来
        $("input[name='[latitude-name]']").val(dingpoint.lat);//纬度存起来

        //允许拖拽标注
        Marker.enableDragging();

        Marker.addEventListener("dragend", function(e){

            //位置信息标注到标注
            biaozhu(e.point);

            $("input[name='[longitude-name]']").val(e.point.lng);//经度存起来
            $("input[name='[latitude-name]']").val(e.point.lat);//纬度存起来

        });
    }
</script>